Skip to content
  1. Mar 20, 2021
  2. Mar 18, 2021
  3. Mar 17, 2021
  4. Mar 16, 2021
    • Kian Paimani's avatar
      Companion for sub/8176 (#2622) · 6b0c56b8
      Kian Paimani authored
      
      
      * Merge
      
      * Fixes
      
      * Fix build
      
      * remove dep.
      
      * undo dep.
      
      * upadte substrate
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=pallet_staking --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/
      
      * Fix lock
      
      * revert lock; cargo update -p sp-io
      
      * from_rational_approx -> from_rational
      
      * Silence more warnings
      
      Co-authored-by: default avatarGav Wood <[email protected]>
      Co-authored-by: default avatarShawn Tabrizi <[email protected]>
      Co-authored-by: default avatarParity Benchmarking Bot <[email protected]>
      6b0c56b8
  5. Mar 15, 2021
  6. Mar 14, 2021
    • Gavin Wood's avatar
      New slots/auctions architecture (#2294) · edd81bf6
      Gavin Wood authored
      
      
      * TODOs
      
      * Add auctions.rs, comment on changes needed.
      
      * Remove cruft from slots
      
      * Remove more from auctions.rs
      
      * More logic drafting in slots.
      
      * More logic in slots.rs
      
      * patch some errors
      
      * more fixes
      
      * last nit
      
      * Cleanups in slots.rs
      
      * Cleanups in slots.rs
      
      * patches
      
      * make build
      
      * crowdloan to new api
      
      * auction compile
      
      * Use ParaId instead of FundIndex in Crowdloan (#2303)
      
      * use paraid instead of fundindex
      
      * Update crowdloan.rs
      
      * check caller is manager
      
      * Auction tests and fix build warnings.
      
      * Configurable origin for initiating auctions
      
      * Remove on_finalize
      
      * #2303 (manual merge)
      
      * Tests for Slots
      
      * some registrar tests
      
      * Apply suggestions from code review
      
      Co-authored-by: default avatarGuillaume Thiolliere <[email protected]>
      
      * Update runtime/common/src/slots.rs
      
      Co-authored-by: default avatarGuillaume Thiolliere <[email protected]>
      
      * Slots uses Registrar for CurrentChains
      
      * swap works test
      
      * on swap impl
      
      * traitify parachain cleanup
      
      * explicit lifecycle tracking for paras
      
      * initial implementation of lifecycles and upgrades
      
      * clean up a bit
      
      * Update runtime/common/src/slots.rs
      
      Co-authored-by: default avatarGuillaume Thiolliere <[email protected]>
      
      * fix doc comment
      
      * more rigid lifecycle checks
      
      * include paras which are transitioning, and lifecycle query
      
      * format guide
      
      * update api
      
      * update guide
      
      * explicit outgoing state, fix genesis
      
      * handle outgoing with transitioning paras
      
      * Revert "explicit lifecycle tracking for paras"
      
      This reverts commit 4177af7ba473bbd9c26bccd861793f25265b6657.
      
      * remove lifecycle tracking from registrar
      
      * do not include transitioning paras in identifier
      
      * Update paras_registrar.rs
      
      * final patches to registrar
      
      * Fix test
      
      * use noop in test
      
      * clean up pending swap on deregistration
      
      * finish registrar tests
      
      * Update roadmap/implementers-guide/src/runtime/paras.md
      
      * Update roadmap/implementers-guide/src/runtime/paras.md
      
      * Update roadmap/implementers-guide/src/runtime/paras.md
      
      * Apply suggestions from code review
      
      * Use matches macro
      
      * Correct terms
      
      * Apply suggestions from code review
      
      * Remove direct need for Slots and Registrar from Crowdloan
      
      * Rejig things slightly
      
      * actions queue
      
      * Revert "actions queue"
      
      This reverts commit b2e9011ec8937d6c73e99292416c9692aeb30f73.
      
      * Traitify Auction interface.
      
      * Mockups and initial code for Crowdloan testing
      
      * One test...
      
      * collapse onboarding state
      
      * fix some crowdloan tests
      
      * one more
      
      * start benchmarks for auctions
      
      * benchmark bid
      
      * fix more crowdloan tests
      
      * onboard and begin retirement no longer exist
      
      * Revert "onboard and begin retirement no longer exist"
      
      This reverts commit 2e100fd94e3540bff5f172328b5d917896f1c6fc.
      
      * Simplify crowdloan and make it work.
      
      * Fixes
      
      * fix some
      
      * finish merge fixes
      
      * fix refund bug in auctions
      
      * Add traits to Registrar for tests and benchmarks
      
      * fix more auction benchmarks
      
      * Fix TestAuctioneer
      
      * finish crowdloan benchmarks
      
      * start setting up full integration tests
      
      * expand integration tests
      
      * finish basic integration test
      
      * add more integration tests
      
      * begin slots benchmarks
      
      * start paras registrar benchmarks
      
      * fix merge
      
      * fix tests
      
      * clean up paras registrar
      
      * remove println
      
      * remove outdated cleanup config
      
      * update benchmarks
      
      * Add WeightInfo
      
      * enable runtime-benchmarks feature flag
      
      * complete swap benchmark
      
      * add parachains and onboarding into westend
      
      * add benchmarks and genesis
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=slots --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * fix benchmark execution
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=paras_registrar --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * Use `new_raise_len` in crowdloan on_initialize
      
      * Update paras_registrar.rs
      
      * fix westend merge
      
      * impl on_swap for crowdloan
      
      * Check fund exists before create
      
      * update for crowdloan sig
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * slots on_initialize
      
      * use integration tests environment for benchmarks
      
      * fix hrmp event
      
      * auction on_initialize
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * fix storage name in auctions
      
      * add auction_index to winning data
      
      * winning data takes into account current auction index
      
      * remove println
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=slots --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * Revert "add auction_index to winning data"
      
      * PastRandomness.
      
      * Fixes
      
      * Use new randomness
      
      * fix use of randomness in auctions and runtime config
      
      * expose consts
      
      * fix auction test
      
      * add deposit per byte for para registration
      
      * basic swap integration test
      
      * make swap test more comprehensive
      
      * Add WinningVec for easier retrieval in the front-end.
      
      * clean up `WinningVec` at the end
      
      * Add event for when a new best bid comes in
      
      * Fix propagation of winners in ending period
      
      * fix benchmarks, refund weight in dissolve
      
      * fix unused
      
      * remove some TODOs
      
      * setup opaque keys for paras in westend
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * remove unused
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=auctions --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * back to regular runtime config
      
      * use saturating math where user input can be
      
      * better first slot check
      
      * Update runtime/common/src/claims.rs
      
      * update westend onswap impl
      
      Co-authored-by: default avatarShawn Tabrizi <[email protected]>
      Co-authored-by: default avatarGuillaume Thiolliere <[email protected]>
      Co-authored-by: default avatarParity Benchmarking Bot <[email protected]>
      edd81bf6
  7. Mar 12, 2021
  8. Mar 10, 2021
    • André Silva's avatar
      runtime: use babe as randomness source (#2504) · b3603605
      André Silva authored
      * runtime: use babe as randomness source
      
      * runtime: fix randomness api
      
      * bridges: fix random_seed
      
      * parachains: use mock TestRandomness from frame_support_test
      
      * parachains: use mock TestRandomness from frame_support_test
      
      * runtime: update randomness source in test-runtime
      
      * runtime: remove unused import
      
      * parachains: add todo to audit usage of randomness api
      
      * "Update Substrate"
      
      Co-authored-by: parity-processbot <>
      b3603605
    • Ashley's avatar
      Companion PR for substrate PR 8072 - Add a config field to babe epochs (#2467) · 956be35d
      Ashley authored
      * Add a config field to babe epochs
      
      * Fix test
      
      * Add BABE_GENESIS_EPOCH_CONFIG consts
      
      * Use PrimaryAndSecondaryVRFSlots and remove newlines
      
      * Make epoch_configs Some
      
      * Fix tests
      
      * Fix test service tests
      
      * Add a BabeEpochConfigMigrations OnRuntimeUpgrade
      
      * Apply suggestions
      
      * Use PrimaryAndSecondaryPlainSlots in kusama
      
      * Remove migration from test runtime and rococo
      
      * Add HasPalletPrefix
      
      * Rename to BabePalletPrefix and change BabeApi -> Babe
      
      * "Update Substrate"
      
      * Update substrate
      
      * Resolve parantheses errors
      
      Co-authored-by: parity-processbot <>
      956be35d
  9. Mar 04, 2021
  10. Mar 03, 2021
  11. Mar 01, 2021
  12. Feb 24, 2021
    • Kian Paimani's avatar
      Properly use weights for the new election pallet (#2508) · 4f83b3e2
      Kian Paimani authored
      
      
      * Revert some weights
      
      * Add features
      
      * Update lock file
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=pallet_election_provider_multi_phase --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=pallet_election_provider_multi_phase --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/
      
      * Use read weights
      
      * cargo run --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=pallet_election_provider_multi_phase --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/
      
      * export stuff
      
      * Update substrate
      
      Co-authored-by: default avatarParity Benchmarking Bot <[email protected]>
      4f83b3e2
    • Kian Paimani's avatar
      Migration testing CLI (#2447) · 2398bbfa
      Kian Paimani authored
      
      
      * Template
      
      * Midway..
      
      * Make all 3 runtimes work
      
      * Update node/service/Cargo.toml
      
      * undo brach updates
      
      * fix with latest version
      
      * Update runtime/kusama/src/lib.rs
      
      Co-authored-by: default avatarShawn Tabrizi <[email protected]>
      
      * Update runtime/rococo/src/lib.rs
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      
      * Final nits
      
      * Update runtime/kusama/src/lib.rs
      
      Co-authored-by: default avatarGuillaume Thiolliere <[email protected]>
      
      Co-authored-by: default avatarShawn Tabrizi <[email protected]>
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      Co-authored-by: default avatarGuillaume Thiolliere <[email protected]>
      2398bbfa
  13. Feb 23, 2021
    • asynchronous rob's avatar
      Approval Checking Improvements Omnibus (#2480) · 3300b533
      asynchronous rob authored
      * add tracing to approval voting
      
      * notify if session info is not working
      
      * add dispute period to chain specs
      
      * propagate genesis session to parachains runtime
      
      * use `on_genesis_session`
      
      * protect against zero cores in computation
      
      * tweak voting rule to be based off of best and add logs
      
      * genesis configuration should use VRF slots only
      
      * swallow more keystore errors
      
      * add some docs
      
      * make validation-worker args non-optional and update clap
      
      * better tracing for bitfield signing and provisioner
      
      * pass amount of bits in bitfields to inclusion instead of recomputing
      
      * debug -> warn for some logs
      
      * better tracing for availability recovery
      
      * a little av-store tracing
      
      * bridge: forward availability recovery messages
      
      * add missing try_from impl
      
      * some more tracing
      
      * improve approval distribution tracing
      
      * guide: hold onto pending approval messages until NewBlocks
      
      * Hold onto pending approval messages until NewBlocks
      
      * guide: adjust comment
      
      * process all actions for one wakeup at a time
      
      * vec
      
      * fix network bridge test
      
      * replace randomness-collective-flip with Babe
      
      * remove PairNotFound
      3300b533
    • Kian Paimani's avatar
      Enable two phase election provider in runtimes in 'DryRun' mode (#2476) · eb09db2a
      Kian Paimani authored
      
      
      * Apply some changes
      
      * Make the runtimes build
      
      * Master.into()
      
      * Undo branch updates.
      
      * Undo unwatned changes
      
      * Fix deps one last time
      
      * Fix election lookahead
      
      * Revert deps
      
      * Fix :P
      
      Co-authored-by: default avatarBastian Köcher <[email protected]>
      eb09db2a
    • Martin Pugh's avatar
      Remove v0.8.28 runtime migrations (#2496) · ece23588
      Martin Pugh authored
      
      
      * remove v0.8.28 runtime migrations
      
      * Update runtime/westend/src/lib.rs
      
      Co-authored-by: default avatarKian Paimani <[email protected]>
      
      * commit suggestions
      
      Co-authored-by: default avatarKian Paimani <[email protected]>
      ece23588
  14. Feb 16, 2021
  15. Feb 13, 2021
  16. Feb 10, 2021
  17. Feb 05, 2021
  18. Feb 04, 2021
  19. Feb 02, 2021
    • Liu-Cheng Xu's avatar
      Conpanion for Substrate#7127 (#1865) · d353c76e
      Liu-Cheng Xu authored
      * Conpanion for Substrate#7127
      
      * Use sp_session::OneSessionHandler
      
      * .
      
      * Fix pallet_session::OneSessionHandler
      
      * OneSessionHandler is in frame_support now
      
      * "Update Substrate"
      
      Co-authored-by: parity-processbot <>
      d353c76e
  20. Jan 28, 2021
  21. Jan 27, 2021
  22. Jan 18, 2021
    • Sergey Pepyakin's avatar
      Remove TransientValidationData (#2272) · 226af6a8
      Sergey Pepyakin authored
      * collation-generation: use persisted validation data
      
      * node: remote FullValidationData API
      
      * runtime: remove FullValidationData API
      
      * backing tests: use persisted validation data
      
      * FullCandidateReceipt: use persisted validation data
      
      This is not a big change since this type is not used anywhere
      
      * Remove ValidationData and TransientValidationData
      
      Also update the guide
      226af6a8
  23. Jan 14, 2021
  24. Jan 06, 2021
  25. Dec 30, 2020
  26. Dec 27, 2020
  27. Dec 18, 2020
    • asynchronous rob's avatar
      Add candidate info to OccupiedCore (#2134) · 38276b08
      asynchronous rob authored
      * guide: add candidate information to OccupiedCore
      
      * add descriptor and hash to occupied core type
      
      * guide: add candidate hash to inclusion
      
      * runtime: return candidate info in core state
      
      * bitfield signing: stop querying runtime as much
      
      * minimize going to runtime in availability distribution
      
      * fix availability distribution tests
      
      * guide: remove para ID from Occupied core
      
      * get all crates compiling
      38276b08
  28. Dec 11, 2020
    • asynchronous rob's avatar
      Add assignment keys to session keys, no separate approvals key (#2092) · 15c25311
      asynchronous rob authored
      * guide: merge backing and approval keys
      
      * bump substrate master & update primitives
      
      * use new SessionInfo struct in session_info
      
      * session keys upgrade for Polkadot
      
      * kusama & westend runtimes
      
      * bump westend, kusama, and polkadot versions
      
      * add session key to rococo & test-runtime
      
      * update prepare-test-net to latest subkey
      
      * update chain specs to support new para_assignment session key
      
      * get cargo.lock from master
      
      * formatting
      
      * update kill_storage based on substrate master
      
      * fix test-service
      
      * assgn -> asgn
      
      * use session info module for assignment session key
      15c25311
  29. Dec 08, 2020
    • Tomasz Drwięga's avatar
      Companion for #6629 (weight params refactor) (#1420) · f28333ae
      Tomasz Drwięga authored
      * Change branch.
      
      * Update runtime.
      
      * Revert "Change branch."
      
      This reverts commit 841c59f3398136c27cc235a29d7d459e8a4c8ce0.
      
      * Update substrate.
      
      * Fix tests.
      
      * Fix compilation.
      
      * Fix frame system imports.
      
      * Fix usages of system
      
      * Fix stuff.
      
      * Fix compilation.
      
      * Fixes.
      
      * Fix block_weight usage.
      
      * Bump substrate.
      f28333ae
  30. Nov 30, 2020
  31. Nov 27, 2020
    • asynchronous rob's avatar
      Move erasure root out of candidate commitments and into descriptor (#2010) · 0a79d663
      asynchronous rob authored
      
      
      * guide: move erasure-root to candidate descriptor
      
      * primitives: move erasure root to descriptor
      
      * guide: unify candidate commitments and validation outputs
      
      * primitives: unify validation outputs and candidate commitments
      
      * parachains-runtime: fix fallout
      
      * runtimes: fix fallout
      
      * collation generation: fix fallout
      
      * fix stray reference in primitives
      
      * fix fallout in node-primitives
      
      * fix remaining fallout in collation generation
      
      * fix fallout in candidate validation
      
      * fix fallout in runtime API subsystem
      
      * fix fallout in subsystem messages
      
      * fix fallout in candidate backing
      
      * fix fallout in availability distribution
      
      * don't clone
      
      * clone
      
      Co-authored-by: default avatarSergei Shulepov <[email protected]>
      0a79d663
  32. Nov 26, 2020
    • Bastian Köcher's avatar
    • ordian's avatar
      past-session validator discovery APIs (#2009) · 39a12b68
      ordian authored
      
      
      * guide: fix formatting for SessionInfo module
      
      * primitives: SessionInfo type
      
      * punt on approval keys
      
      * ah, revert the type alias
      
      * session info runtime module skeleton
      
      * update the guide
      
      * runtime/configuration: sync with the guide
      
      * runtime/configuration: setters for newly added fields
      
      * runtime/configuration: set codec indexes
      
      * runtime/configuration: update test
      
      * primitives: fix SessionInfo definition
      
      * runtime/session_info: initial impl
      
      * runtime/session_info: use initializer for session handling (wip)
      
      * runtime/session_info: mock authority discovery trait
      
      * guide: update the initializer's order
      
      * runtime/session_info: tests skeleton
      
      * runtime/session_info: store n_delay_tranches in Configuration
      
      * runtime/session_info: punt on approval keys
      
      * runtime/session_info: add some basic tests
      
      * Update primitives/src/v1.rs
      
      * small fixes
      
      * remove codec index annotation on structs
      
      * fix off-by-one error
      
      * validator_discovery: accept a session index
      
      * runtime: replace validator_discovery api with session_info
      
      * Update runtime/parachains/src/session_info.rs
      
      Co-authored-by: default avatarSergei Shulepov <[email protected]>
      
      * runtime/session_info: add a comment about missing entries
      
      * runtime/session_info: define the keys
      
      * util: expose connect_to_past_session_validators
      
      * util: allow session_info requests for jobs
      
      * runtime-api: add mock test for session_info
      
      * collator-protocol: add session_index to test state
      
      * util: fix error message for runtime error
      
      * fix compilation
      
      * fix tests after merge with master
      
      Co-authored-by: default avatarSergei Shulepov <[email protected]>
      39a12b68
  33. Nov 17, 2020
    • ordian's avatar
      update most of the dependencies (#1946) · 0a8a607a
      ordian authored
      * update tiny-keccak to 0.2
      
      * update deps except bitvec and shared_memory
      
      * fix some warning after futures upgrade
      
      * remove useless package rename caused by bug in cargo-upgrade
      
      * revert parity-util-mem *
      
      * remove unused import
      
      * cargo update
      
      * remove all renames on parity-scale-codec
      
      * remove the leftovers
      
      * remove unused dep
      0a8a607a
  34. Nov 06, 2020
    • Sergey Pepyakin's avatar
      Implement HRMP (#1900) · c96f8cfc
      Sergey Pepyakin authored
      * HRMP: Update the impl guide
      
      * HRMP: Incorporate the channel notifications into the guide
      
      * HRMP: Renaming in the impl guide
      
      * HRMP: Constrain the maximum number of HRMP messages per candidate
      
      This commit addresses the HRMP part of https://github.com/paritytech/polkadot/issues/1869
      
      
      
      * XCM: Introduce HRMP related message types
      
      * HRMP: Data structures and plumbing
      
      * HRMP: Configuration
      
      * HRMP: Data layout
      
      * HRMP: Acceptance & Enactment
      
      * HRMP: Test base logic
      
      * Update adder collator
      
      * HRMP: Runtime API for accessing inbound messages
      
      Also, removing some redundant fully-qualified names.
      
      * HRMP: Add diagnostic logging in acceptance criteria
      
      * HRMP: Additional tests
      
      * Self-review fixes
      
      * save test refactorings for the next time
      
      * Missed a return statement.
      
      * a formatting blip
      
      * Add missing logic for appending HRMP digests
      
      * Remove the channel contents vectors which became empty
      
      * Tighten HRMP channel digests invariants.
      
      * Apply suggestions from code review
      
      Co-authored-by: default avatarPeter Goodspeed-Niklaus <[email protected]>
      
      * Remove a note about sorting for channel id
      
      * Add missing rustdocs to the configuration
      
      * Clarify and update the invariant for HrmpChannelDigests
      
      * Make the onboarding invariant less sloppy
      
      Namely, introduce `Paras::is_valid_para` (in fact, it already is present
      in the implementation) and hook up the invariant to that.
      
      Note that this says "within a session" because I don't want to make it
      super strict on the session boundary. The logic on the session boundary
      should be extremely careful.
      
      * Make `CandidateCheckContext` use T::BlockNumber for hrmp_watermark
      
      Co-authored-by: default avatarPeter Goodspeed-Niklaus <[email protected]>
      c96f8cfc