Prefire multiple devices (#2543)
* Update Prefire, setup multiple snapshot devices and languages Squashed commits: [28cb4ae6d] Switch to macos-14, iOS 17 and the iPhone 15 simulator [080fc82cb] Update snapshots [c874ca9c7] Bump Compound and Prefire, reduce perceptual precission to 0.98 [a59b8a54c] Update snapshots after adding iPad and pseudolanguage snapshotting [f30cc3277] Setup multi-language snapshotting [aeb11c7e7] Update prefire template, setup multiple snapshot devices * Update ruby dependencies and fastlane plugins * Bump Compound, switch back to the original prefire - version 2.0.4 * Remove preview test simulator version specifiers
This commit is contained in:
9
.github/workflows/unit_tests.yml
vendored
9
.github/workflows/unit_tests.yml
vendored
@@ -11,7 +11,7 @@ on:
|
||||
jobs:
|
||||
tests:
|
||||
name: Tests
|
||||
runs-on: macos-13
|
||||
runs-on: macos-14
|
||||
|
||||
concurrency:
|
||||
# When running on develop, use the sha to allow all runs of this workflow to run concurrently.
|
||||
@@ -39,13 +39,6 @@ jobs:
|
||||
run:
|
||||
swiftformat --lint .
|
||||
|
||||
- name: Link to 16.4 Simulators
|
||||
run: |
|
||||
echo "Creating Runtimes folder if needed..."
|
||||
sudo mkdir -p /Library/Developer/CoreSimulator/Profiles/Runtimes
|
||||
echo "Creating symlink of the iOS 16.4 runtime..."
|
||||
sudo ln -s /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime /Library/Developer/CoreSimulator/Profiles/Runtimes/iOS\ 16.4.simruntime
|
||||
|
||||
- name: Run tests
|
||||
run: bundle exec fastlane unit_tests
|
||||
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
test_configuration:
|
||||
- template_file_path: Tools/Prefire/PreviewTests.stencil
|
||||
- simulator_device: "iPhone14"
|
||||
- required_os: 16
|
||||
@@ -7072,7 +7072,7 @@
|
||||
repositoryURL = "https://github.com/BarredEwe/Prefire";
|
||||
requirement = {
|
||||
kind = upToNextMinorVersion;
|
||||
minimumVersion = 1.5.0;
|
||||
minimumVersion = 2.0.4;
|
||||
};
|
||||
};
|
||||
395DE6AE429B7ACC7C7FE31D /* XCRemoteSwiftPackageReference "KZFileWatchers" */ = {
|
||||
@@ -7240,7 +7240,7 @@
|
||||
repositoryURL = "https://github.com/element-hq/compound-ios";
|
||||
requirement = {
|
||||
kind = revision;
|
||||
revision = 19c778b6ce0b82601ecdca23ff8d4a7aa41f990f;
|
||||
revision = 19bc4c5cf9c69b7b7aeb9ac8c937c2c81a83e8b1;
|
||||
};
|
||||
};
|
||||
F76A08D0EA29A07A54F4EB4D /* XCRemoteSwiftPackageReference "swift-collections" */ = {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/element-hq/compound-ios",
|
||||
"state" : {
|
||||
"revision" : "19c778b6ce0b82601ecdca23ff8d4a7aa41f990f"
|
||||
"revision" : "19bc4c5cf9c69b7b7aeb9ac8c937c2c81a83e8b1"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -175,8 +175,8 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/BarredEwe/Prefire",
|
||||
"state" : {
|
||||
"revision" : "898a4a9f5d5eb0a0b07adb1a7c89daf0f068b129",
|
||||
"version" : "1.5.0"
|
||||
"revision" : "608e7992dedc5ee409e59b3580010371ff0cef57",
|
||||
"version" : "2.0.4"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -263,7 +263,7 @@
|
||||
{
|
||||
"identity" : "swiftui-introspect",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/siteline/SwiftUI-Introspect",
|
||||
"location" : "https://github.com/siteline/SwiftUI-Introspect.git",
|
||||
"state" : {
|
||||
"revision" : "b94da693e57eaf79d16464b8b7c90d09cba4e290",
|
||||
"version" : "0.9.2"
|
||||
|
||||
@@ -176,12 +176,12 @@ struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview {
|
||||
RoomDetailsEditScreen(context: viewModel.context)
|
||||
}
|
||||
.previewDisplayName("Normal")
|
||||
.snapshot(delay: 0.1)
|
||||
.snapshot(delay: 0.25)
|
||||
|
||||
NavigationStack {
|
||||
RoomDetailsEditScreen(context: readOnlyViewModel.context)
|
||||
}
|
||||
.previewDisplayName("Read only")
|
||||
.snapshot(delay: 0.1)
|
||||
.snapshot(delay: 0.25)
|
||||
}
|
||||
}
|
||||
|
||||
27
Gemfile.lock
27
Gemfile.lock
@@ -7,15 +7,17 @@ GIT
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.6)
|
||||
CFPropertyList (3.0.7)
|
||||
base64
|
||||
nkf
|
||||
rexml
|
||||
addressable (2.8.6)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
artifactory (3.0.15)
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.0)
|
||||
aws-partitions (1.887.0)
|
||||
aws-sdk-core (3.191.0)
|
||||
aws-partitions (1.896.0)
|
||||
aws-sdk-core (3.191.3)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.8)
|
||||
@@ -30,6 +32,7 @@ GEM
|
||||
aws-sigv4 (1.8.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.2.0)
|
||||
claide (1.1.0)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
@@ -115,7 +118,7 @@ GEM
|
||||
fastlane-plugin-brew (0.1.1)
|
||||
fastlane-plugin-browserstack (0.3.2)
|
||||
rest-client (~> 2.0, >= 2.0.2)
|
||||
fastlane-plugin-sentry (1.18.0)
|
||||
fastlane-plugin-sentry (1.20.0)
|
||||
os (~> 1.1, >= 1.1.4)
|
||||
fastlane-plugin-xcconfig (2.0.0)
|
||||
fastlane-plugin-xcodegen (1.1.0)
|
||||
@@ -137,12 +140,12 @@ GEM
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-storage_v1 (0.31.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-cloud-core (1.6.1)
|
||||
google-cloud-core (1.7.0)
|
||||
google-cloud-env (>= 1.0, < 3.a)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.3.1)
|
||||
google-cloud-errors (1.4.0)
|
||||
google-cloud-storage (1.47.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
@@ -164,17 +167,19 @@ GEM
|
||||
httpclient (2.8.3)
|
||||
jmespath (1.6.2)
|
||||
json (2.7.1)
|
||||
jwt (2.7.1)
|
||||
jwt (2.8.1)
|
||||
base64
|
||||
mime-types (3.5.2)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2023.1205)
|
||||
mime-types-data (3.2024.0305)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.5)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.3.0)
|
||||
multipart-post (2.4.0)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.1)
|
||||
netrc (0.11.0)
|
||||
nkf (0.2.0)
|
||||
optparse (0.4.0)
|
||||
os (1.1.4)
|
||||
plist (3.7.1)
|
||||
@@ -196,7 +201,7 @@ GEM
|
||||
rubyzip (2.3.2)
|
||||
security (0.1.3)
|
||||
semantic (1.6.1)
|
||||
signet (0.18.0)
|
||||
signet (0.19.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
|
||||
7
PreviewTests/.prefire.yml
Normal file
7
PreviewTests/.prefire.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
test_configuration:
|
||||
- template_file_path: PreviewTests.stencil
|
||||
- simulator_device: "iPhone15,2"
|
||||
- required_os: 17
|
||||
- snapshot_devices:
|
||||
- iPhone 15
|
||||
- iPad
|
||||
@@ -4,7 +4,6 @@
|
||||
import XCTest
|
||||
import SwiftUI
|
||||
import Prefire
|
||||
|
||||
@testable import SnapshotTesting
|
||||
#if canImport(AccessibilitySnapshot)
|
||||
import AccessibilitySnapshot
|
||||
@@ -12,11 +11,24 @@ import Prefire
|
||||
{% if argument.mainTarget %}
|
||||
@testable import {{ argument.mainTarget }}
|
||||
{% endif %}
|
||||
{% for import in argument.imports %}
|
||||
{% if import != "last" %}
|
||||
import {{ import }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% for import in argument.testableImports %}
|
||||
{% if import != "last" %}
|
||||
@testable import {{ import }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
class PreviewTests: XCTestCase {
|
||||
private let deviceConfig: ViewImageConfig = .iPhoneX
|
||||
private let simulatorDevice = "{{ argument.simulatorDevice|default:"iPhone15,2" }}"
|
||||
private let requiredOSVersion = {{ argument.simulatorOSVersion|default:"16" }}
|
||||
private var simulatorDevice: String?{% if argument.simulatorDevice %} = "{{ argument.simulatorDevice|default:nil }}"{% endif %}
|
||||
private var requiredOSVersion: Int?{% if argument.simulatorOSVersion %} = {{ argument.simulatorOSVersion }}{% endif %}
|
||||
private let snapshotDevices: [String]{% if argument.snapshotDevices %} = {{ argument.snapshotDevices|split:"|" }}{% else %} = []{% endif %}
|
||||
|
||||
|
||||
{% if argument.file %}
|
||||
|
||||
private var file: StaticString { .init(stringLiteral: "{{ argument.file }}") }
|
||||
@@ -29,40 +41,104 @@ class PreviewTests: XCTestCase {
|
||||
UIView.setAnimationsEnabled(false)
|
||||
}
|
||||
|
||||
// MARK: - PreviewProvider
|
||||
|
||||
{% for type in types.types where (type.implements.PrefireProvider or type.based.PrefireProvider or type|annotated:"PrefireProvider") and type.name != "TestablePreview" %}
|
||||
func test_{{ type.name|lowerFirstLetter|replace:"_Previews", "" }}() {
|
||||
for preview in {{ type.name }}._allPreviews {
|
||||
assertSnapshots(matching: preview)
|
||||
}
|
||||
}
|
||||
{%- if not forloop.last %}
|
||||
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if argument.previewsMacros %}
|
||||
// MARK: - Macros
|
||||
|
||||
{{ argument.previewsMacros }}
|
||||
{% endif %}
|
||||
// MARK: Private
|
||||
|
||||
private func assertSnapshots(matching preview: _Preview, testName: String = #function) {
|
||||
let isScreen = preview.layout == .device
|
||||
let device = preview.device?.snapshotDevice() ?? deviceConfig
|
||||
guard !snapshotDevices.isEmpty else {
|
||||
if let failure = assertSnapshots(matching: AnyView(preview.content),
|
||||
name: preview.displayName,
|
||||
isScreen: preview.layout == .device,
|
||||
device: preview.device?.snapshotDevice() ?? deviceConfig,
|
||||
testName: testName) {
|
||||
XCTFail(failure)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
for deviceName in snapshotDevices {
|
||||
guard var device = PreviewDevice(rawValue: deviceName).snapshotDevice() else {
|
||||
fatalError("Unknown device name: \(deviceName)")
|
||||
}
|
||||
|
||||
// Ignore specific device safe area
|
||||
device.safeArea = .zero
|
||||
|
||||
// Ignore specific device display scale
|
||||
let traits = UITraitCollection(displayScale: 2.0)
|
||||
|
||||
if let failure = assertSnapshots(matching: AnyView(preview.content),
|
||||
name: preview.displayName,
|
||||
isScreen: preview.layout == .device,
|
||||
device: device,
|
||||
testName: testName + deviceName + "-" + localeCode,
|
||||
traits: traits) {
|
||||
XCTFail(failure)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var localeCode: String {
|
||||
if UserDefaults.standard.bool(forKey: "NSDoubleLocalizedStrings") {
|
||||
return "pseudo"
|
||||
}
|
||||
return languageCode + "-" + regionCode
|
||||
}
|
||||
|
||||
private var languageCode: String {
|
||||
Locale.current.language.languageCode?.identifier ?? ""
|
||||
}
|
||||
|
||||
private var regionCode: String {
|
||||
Locale.current.language.region?.identifier ?? ""
|
||||
}
|
||||
|
||||
private func assertSnapshots(matching view: AnyView,
|
||||
name: String?, isScreen: Bool,
|
||||
device: ViewImageConfig,
|
||||
testName: String = #function,
|
||||
traits: UITraitCollection = .init()) -> String? {
|
||||
var delay: TimeInterval = 0
|
||||
var precision: Float = 1
|
||||
var perceptualPrecision: Float = 1
|
||||
|
||||
let view = preview.content
|
||||
let view = view
|
||||
.onPreferenceChange(DelayPreferenceKey.self) { delay = $0 }
|
||||
.onPreferenceChange(PrecisionPreferenceKey.self) { precision = $0 }
|
||||
.onPreferenceChange(PerceptualPrecisionPreferenceKey.self) { perceptualPrecision = $0 }
|
||||
|
||||
let matchingView = isScreen ? AnyView(view) : AnyView(view
|
||||
.frame(width: device.size?.width)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
)
|
||||
|
||||
let failure = verifySnapshot(of: matchingView,
|
||||
as: .prefireImage(precision: { precision }, duration: { delay }, layout: isScreen ? .device(config: device) : .sizeThatFits),
|
||||
named: preview.displayName{% if argument.file %},
|
||||
file: file{% endif %},
|
||||
testName: testName)
|
||||
|
||||
if let failure {
|
||||
XCTFail(failure)
|
||||
}
|
||||
let failure = verifySnapshot(
|
||||
of: matchingView,
|
||||
as: .prefireImage(precision: { precision },
|
||||
perceptualPrecision: { perceptualPrecision },
|
||||
duration: { delay },
|
||||
layout: isScreen ? .device(config: device) : .sizeThatFits,
|
||||
traits: traits),
|
||||
named: name{% if argument.file %},
|
||||
file: file{% endif %},
|
||||
testName: testName
|
||||
)
|
||||
|
||||
#if canImport(AccessibilitySnapshot)
|
||||
let vc = UIHostingController(rootView: matchingView)
|
||||
@@ -70,27 +146,28 @@ class PreviewTests: XCTestCase {
|
||||
assertSnapshot(
|
||||
matching: vc,
|
||||
as: .wait(for: delay, on: .accessibilityImage(showActivationPoints: .always)),
|
||||
named: preview.displayName.map { $0 + ".accessibility" }{% if argument.file %},
|
||||
named: name.flatMap { $0 + ".accessibility" }{% if argument.file %},
|
||||
file: file{% endif %},
|
||||
testName: testName
|
||||
)
|
||||
#endif
|
||||
return failure
|
||||
}
|
||||
|
||||
/// Check environments to avoid problems with snapshots on different devices or OS.
|
||||
private func checkEnvironments() {
|
||||
let deviceModel = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"]
|
||||
let osVersion = ProcessInfo().operatingSystemVersion
|
||||
guard deviceModel?.contains(simulatorDevice) ?? false else {
|
||||
fatalError("Switch to using \(simulatorDevice) for these tests.")
|
||||
}
|
||||
|
||||
guard osVersion.majorVersion == requiredOSVersion else {
|
||||
fatalError("Switch to iOS \(requiredOSVersion) for these tests.")
|
||||
if let simulatorDevice {
|
||||
let deviceModel = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"]
|
||||
guard deviceModel?.contains(simulatorDevice) ?? false else {
|
||||
fatalError("Switch to using \(simulatorDevice) for these tests.")
|
||||
}
|
||||
}
|
||||
|
||||
guard UITraitCollection.current.userInterfaceStyle == .light else {
|
||||
fatalError("Switch to light mode for these tests.")
|
||||
if let requiredOSVersion {
|
||||
let osVersion = ProcessInfo().operatingSystemVersion
|
||||
guard osVersion.majorVersion == requiredOSVersion else {
|
||||
fatalError("Switch to iOS \(requiredOSVersion) for these tests.")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,7 +177,7 @@ class PreviewTests: XCTestCase {
|
||||
private extension PreviewDevice {
|
||||
func snapshotDevice() -> ViewImageConfig? {
|
||||
switch rawValue {
|
||||
case "iPhone 14", "iPhone 13", "iPhone 12", "iPhone 11", "iPhone 10":
|
||||
case "iPhone 15", "iPhone 14", "iPhone 13", "iPhone 12", "iPhone 11", "iPhone 10":
|
||||
return .iPhoneX
|
||||
case "iPhone 6", "iPhone 6s", "iPhone 7", "iPhone 8":
|
||||
return .iPhone8
|
||||
@@ -108,6 +185,14 @@ private extension PreviewDevice {
|
||||
return .iPhone8Plus
|
||||
case "iPhone SE (1st generation)", "iPhone SE (2nd generation)":
|
||||
return .iPhoneSe
|
||||
case "iPad":
|
||||
return .iPad10_2
|
||||
case "iPad Mini":
|
||||
return .iPadMini
|
||||
case "iPad Pro 11":
|
||||
return .iPadPro11
|
||||
case "iPad Pro 12.9":
|
||||
return .iPadPro12_9
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
@@ -117,6 +202,7 @@ private extension Snapshotting where Value: SwiftUI.View, Format == UIImage {
|
||||
static func prefireImage(
|
||||
drawHierarchyInKeyWindow: Bool = false,
|
||||
precision: @escaping () -> Float,
|
||||
perceptualPrecision: @escaping () -> Float,
|
||||
duration: @escaping () -> TimeInterval,
|
||||
layout: SwiftUISnapshotLayout = .sizeThatFits,
|
||||
traits: UITraitCollection = .init()
|
||||
@@ -135,7 +221,7 @@ private extension Snapshotting where Value: SwiftUI.View, Format == UIImage {
|
||||
config = .init(safeArea: .zero, size: size, traits: traits)
|
||||
}
|
||||
|
||||
return SimplySnapshotting<UIImage>(pathExtension: "png", diffing: .prefireImage(precision: precision, scale: traits.displayScale))
|
||||
return SimplySnapshotting<UIImage>(pathExtension: "png", diffing: .prefireImage(precision: precision, perceptualPrecision: perceptualPrecision, scale: traits.displayScale))
|
||||
.asyncPullback { view in
|
||||
var config = config
|
||||
|
||||
@@ -176,7 +262,7 @@ private extension Snapshotting where Value: SwiftUI.View, Format == UIImage {
|
||||
}
|
||||
|
||||
private extension Diffing where Value == UIImage {
|
||||
static func prefireImage(precision: @escaping () -> Float, scale: CGFloat?) -> Diffing {
|
||||
static func prefireImage(precision: @escaping () -> Float, perceptualPrecision: @escaping () -> Float, scale: CGFloat?) -> Diffing {
|
||||
lazy var originalDiffing = Diffing.image(precision: precision(), perceptualPrecision: 0.98, scale: scale)
|
||||
return Diffing(
|
||||
toData: { originalDiffing.toData($0) },
|
||||
@@ -2,9 +2,26 @@
|
||||
"configurations" : [
|
||||
{
|
||||
"id" : "D789E5F1-30B8-4A23-B20E-281ACE05CFD6",
|
||||
"name" : "Default",
|
||||
"name" : "English",
|
||||
"options" : {
|
||||
|
||||
"language" : "en",
|
||||
"locationScenario" : {
|
||||
"identifier" : "London, England",
|
||||
"referenceType" : "built-in"
|
||||
},
|
||||
"region" : "GB"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id" : "059C4F1C-EAB6-4D96-BA8F-30DF92A365E9",
|
||||
"name" : "Pseudolanguage",
|
||||
"options" : {
|
||||
"language" : "IDELaunchSchemeLanguageDoubleLocalizedStrings",
|
||||
"locationScenario" : {
|
||||
"identifier" : "London, England",
|
||||
"referenceType" : "built-in"
|
||||
},
|
||||
"region" : "DE"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c7eca90ff3c9a34106fa556be1a0b865695e30b3753bd7add22e686d9ea258c6
|
||||
size 167818
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2fb30d84c0853cbab1341218d256e42c64d3f9388e9b51fe572c1cf3d44e4270
|
||||
size 235706
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:022549154cb0f9a9d6d828b592251e787d04b871f01c05f0133b8bda66a7e4c0
|
||||
size 114860
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a12aa0931a0e8428e1db8f70c79fb84af1e5aa5ff0c14d3553154f5e7b6ee56c
|
||||
size 182408
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c374de7541c3218ed8988adc086265a0c1e4cf7fe73461068ef79356c0bfaae0
|
||||
size 138506
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:70fcd44d149c0c7633fe2bee0ba85f3ae81d1fedd801a66239f0d1307909a430
|
||||
size 173623
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5eb23616fd2661ac5a2990e0dfef92c504da2726db2138222b88fba79fcd7500
|
||||
size 267411
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9be44c03d825f3650984e0cfd0540915913f896951acd0d39991f9843371c111
|
||||
size 122394
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:28cffcec20c859af14d5e018c63da99c3014375d56ffd30751c15846f823f031
|
||||
size 200260
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:dadb1c1c336e0a8a74218bfc0b8d2b6d5e82e02b78489dd7c269ca7be53842db
|
||||
size 142673
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:00901d81bcf6162af7818cac12604d49d47d700ae98fe9f263aec7d8664c7d96
|
||||
size 149648
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b431c7382f2bd6169445dd6eb57985e81b052c296333b99ec90f9b4bc2cc7a92
|
||||
size 184609
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:25ec6698fbca73ff83f88300ed333a050aef317f388ce71fc6476596c123853d
|
||||
size 104872
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d117add9e8bf7b4400f03dd33bb0171917f6046e4c296bc5e122b92de64e84aa
|
||||
size 139693
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0ff828f5d649ccf1a46d0b7a126eea8d4754f997e8e30bffc6163c9d90aab62c
|
||||
size 127416
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bfa36c329639b7bd53482c4066a37743160839bd9a4debe3de9cfdb80883e961
|
||||
size 115021
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:95ea5891cadd570a9dfd69fd1ff1282f3b91c688f63b7e78443b76ecc27109e4
|
||||
size 152680
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b6c0168a64d2438a4a11c031845dd70401758c91b507617a8960eba73fa4efd8
|
||||
size 68382
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b1ea1685762aa0e0f05b5c974a069e3747aba7469c83b0ab754a1f69193e6418
|
||||
size 98385
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:85b985d45867e305258e43cf7181d74d5be39258d68f3484731e4c2bdc3ea2da
|
||||
size 93646
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:86e1421b4be07786d755bd195b59f2175d8694a45a9c575d47cbd600b606a09e
|
||||
size 135685
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5f7e77738f7863830162825f0eb3b5c12edb20700820c2897aba02608aad391e
|
||||
size 166823
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ae2dcb5510d49106cfdfa8a9edb46e885d343f83b73dc5b8a088a26a99738335
|
||||
size 91052
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:79a196f4288fe6fb3cc4ad9ba80ddd4bbe676fe0325f3cc4272ebbd3d7ed72b1
|
||||
size 116741
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6d8b859217f475cd3477e96e8f501662d7c288d731800112d97af0d8c7718273
|
||||
size 129515
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5140ad4c2e87cedd06778a7dee016da2357db9bf4d52cb503f9e3d2bc363d905
|
||||
size 117569
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f9922d84c272da0d0df45dc37b5a391bf654ab73024159148d80afaa94c69fe3
|
||||
size 133736
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:99821a8646ec4494d5faf8e1027ff3af755fd57ba0c86789c8c294ee1d0447a9
|
||||
size 159121
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3ddc6a03294746a12c7072a9f85f7af9296ca085a2108107ba1df4664dd669c4
|
||||
size 178130
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2e3efc828ed17b5860d525801af71eb9f3b77a89d3b1e8d296199a44805d28de
|
||||
size 74117
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:19688b95f90db29ff6f604c56dfcda7e571f360a5dd121594bcf2b000559e3d7
|
||||
size 85161
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:956c62fe195c949834b198703e1a7661b859ba6b509815fcecbd7200bf6d801f
|
||||
size 113704
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1d1e5d4ff7af3faabe400cd75e4621df01a7e6bec1dca29a5a407f3951810e23
|
||||
size 132567
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:daa2048ba6399cff083bc56e088c5b1581cb24aafc8a337d3c430abc4f726627
|
||||
size 100719
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:95b97cb16f44b790b415d87301b440ab8d916886c16a964ef46337fc4440ff75
|
||||
size 112640
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:39a6378f7df6c01583babab0b71bac767f97fa37905f2d867d0a8904d7e9acdd
|
||||
size 122499
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:55e0c5e851d041da806f13a65b5d1b0c1161a3b71941db9cc6e9a8723bf4510f
|
||||
size 124974
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:640a83ceb101623de31fd268475af5b9059c7a2ca7a8f7aa8199fb7daef5a939
|
||||
size 100288
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a1bbe9c2e6a8fb461ea4aaa0624f5f73c4465072b598d5aafd053df719eb5610
|
||||
size 98946
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4ce96b100be97ab727d12dd40fa830e45c3273cde01109db36edb2948cb0f23b
|
||||
size 169765
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8674d2c5605782b44e429817a872f828465efa8fd0efed8da84fa6e1502a4c3b
|
||||
size 171910
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5de5005d6e79e1d8bbc85ec321df1978098c1caa08d951eb600e50348101f9b3
|
||||
size 114059
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:65ae23a0ac8ec3fe8ba1e8492c9347d0a0e57de0c2b1d1b84507ec9f0058a3e1
|
||||
size 113353
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:854578a7bf75adaad847dcf733ad364670d0b5c601f3c767c26a1f477f67e2a2
|
||||
size 80094
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d09086b13a697b7ce3e112aebec1c8fcaa07143e7d24d6b6fcae8b12e4844899
|
||||
size 82078
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:77162b478466530aa5673acca394d3b34b36174a486abc2aa78802b63dcccc04
|
||||
size 57653
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c5de6d19acc089cea0d13048ea24ad2bdfbf84474f99469c97ad46f7a2135b58
|
||||
size 56491
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:51f1498af1600bd16c2ff63d26a241e0eed0279576bf7f7d063d2d8752bd1b90
|
||||
size 124281
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:332349a7e1b08546476638d82703d6658193ff36931f4eb105cac8df4d20f274
|
||||
size 126046
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e79c31390ca36a329d1bebaa344a2aaaa16325d128c8c38275bc90a1b1da5047
|
||||
size 70183
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a338698467bdd325c3ac3e9ab714bcf3dd45f4f0cc1d4cb9cc7ace6a5c802237
|
||||
size 69005
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fc42e53ebad66196b3dac9a0d3be487b064deafa75dd4a76aae6d4bf6b7b9cca
|
||||
size 105399
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:37dc958d49a8f2cf05422d6334566684073d45bcd7bfed775bde0baeb1236bde
|
||||
size 105681
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:328561b6398a9933313f2c511b6dbeedb3a32219f5df2f04e5d3f4d758e3e697
|
||||
size 85677
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:992d6bf4555a16f2456a93d46f013c9abf4d817b03d2a90ea3ea8cff4be2a550
|
||||
size 84232
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f9fb8d94bfa8533cfb42bbcfa9dcb5abfa61f1ccf74adca0ea9f902310bbbb53
|
||||
size 108769
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:32b935a10ffce63ddeccd817c7439ae9e79d8c732698d886638483e6cb3dce54
|
||||
size 97696
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d08caa830148a6cde48cbce58769934c8d8d6b9a759b7eeabafda110c59a9162
|
||||
size 101336
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b82e5015a7c1d4217cf57ffd9dec598de325ab925489097ea870f75f2437d789
|
||||
size 138109
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bfd4175b3c9cdbe6f92bc9fd68d2760ac122b92de8d2cf9909db816f00475e71
|
||||
size 117414
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:70d6145bbe005041218aa7e6ed0bc7c9be34480c5fff783500f368d176db2ebc
|
||||
size 123473
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8550ac5e218bcd29ecf4e1b7c570046280f5bab447be47f99bc8d4a3d090f443
|
||||
size 60872
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2e2ed1976b415e39c28f13ee7b48c8ab2850da2e461f2561048415a9d5614763
|
||||
size 50446
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8495eb3332ec93bb27b08eadb2f163c2fb648523e39e5637ebce043e884a316f
|
||||
size 54454
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4d856dc741b5d93f0687a3f6f99f348307c13c3dde47c90933e619820b8da175
|
||||
size 86909
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3b5861a69bdec28fb65f118528af9615446c24e14da6a07e91cfb8b6292ae955
|
||||
size 69225
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8279de468b0d1757829e2c1a57c9d98d894e55cb089121a9b353e4ea7bfbfdad
|
||||
size 75720
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:905d8d16cfce1540a91a3c8ef7d4295b844d2aab4c3ed3035230277acb56e228
|
||||
size 94357
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f918886d8da2987f6ae26762267557ce2f7d7f0b02ce985de56caa3fb7ee305c
|
||||
size 83101
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:08af67d397dafe03f60b36e2d1650a9031c12041ce5e015f6c2f81af4e9731fa
|
||||
size 88510
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c7f0fd9b44f02c77dd16eb42923bf40a42970f384ca9b8d61f6474a0083388ce
|
||||
size 82339
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e28312355d30b5bf3473ee327ba84a622a94af9bdcb9dd1f4435b356b52fc45d
|
||||
size 81405
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c7f0fd9b44f02c77dd16eb42923bf40a42970f384ca9b8d61f6474a0083388ce
|
||||
size 82339
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e28312355d30b5bf3473ee327ba84a622a94af9bdcb9dd1f4435b356b52fc45d
|
||||
size 81405
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c4d662451a74318edb71684b01b9d79b388f37e977e5dcb459c71e5ddd645b29
|
||||
size 41108
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4d28917da204938efb19eab7a37876b1c85a838c76771fa844504018501059bc
|
||||
size 39218
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c4d662451a74318edb71684b01b9d79b388f37e977e5dcb459c71e5ddd645b29
|
||||
size 41108
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4d28917da204938efb19eab7a37876b1c85a838c76771fa844504018501059bc
|
||||
size 39218
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b26ac0a837243d801ad91fa6b9d79cc880b0001c9940a467c126c0e51eaeb1bf
|
||||
size 68867
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d1214de5c36335a1e6bf8b8839b028e7a7d2ea31cfdbcdbae901470f2fed1447
|
||||
size 66226
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e397b937f7f407afccd1b6b98e67ca3c15d743a607c370713f8486d7cf215fa3
|
||||
size 74639
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c2eddb648a0298d35c9ed697aefaf89ce609f58c0d3ba9fdb0b2c1cd892594fd
|
||||
size 123637
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e397b937f7f407afccd1b6b98e67ca3c15d743a607c370713f8486d7cf215fa3
|
||||
size 74639
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c2eddb648a0298d35c9ed697aefaf89ce609f58c0d3ba9fdb0b2c1cd892594fd
|
||||
size 123637
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:012ed47b68467b49ba5824c021f8b4ae8a0c2eea5dc5477f5b52ce69b185175b
|
||||
size 51382
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e02beede3f2a35a44b403435c8634d20cc9a120141dd7973f158c3c755914247
|
||||
size 73050
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:012ed47b68467b49ba5824c021f8b4ae8a0c2eea5dc5477f5b52ce69b185175b
|
||||
size 51382
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e02beede3f2a35a44b403435c8634d20cc9a120141dd7973f158c3c755914247
|
||||
size 73050
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7833be660342b496d8c652c0351ef87746844a57bff98b708e08405c37518a92
|
||||
size 64979
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4a2018e28af9bff5d97c3a49fc824ba47f648987e7ed7d7e4af56041db872219
|
||||
size 130410
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ff896f598f8727e98beeec6b16eb72f939c32cd70aa087b6687e8334878b358e
|
||||
size 176633
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user