mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Screenshot tests (#130)
* #9 Add snapshot testing library * #9 Create script to boot test simulators * #9 Create the UI test plan * #9 Create shared schemes for test targets * #9 Disable split view for UI tests * #9 Fix fastlane dependencies * #9 Add snapshot testing to the application * #9 assert screenshots * #9 fix swipe gestures on iPad * #9 Fix accessing items in session verification screen * #9 Workaround for flaky unit test * #9 Specify scheme for alpha build * #9 Add reference screenshots * Update python script path and check assets for png check * Update script path * Use static timezone for simulator time * Fix build after SwiftFormat * Add changelog * Upload failed screenshots artifact * Always upload artifacts * Update boot simulator script * Update simulator overridden time * Install pytz before tests * Get time from Ruby script * Disable SwiftUI animation when running UI tests * Update screenshots after animation setting * Include reference images in the artifact * Update matching precision * Update image matching precision & revert artifact content * Include Xcode result in the artifact * Update test output directory * Disable gradient on splash screen for tests * Tap next button explicitly * Wait a bit before checking alert * Wait 1 second * Run SwiftFormat on project * Ignore temporary screenshots * Fix most of the PR remarks * Fix conflicts * Bump Python version to 3 * Update reference screenshots for authentication screens * Update SwiftFormat * Fix flakey session verification test. * Update scheme. Co-authored-by: Doug <douglase@element.io>
This commit is contained in:
@@ -14,12 +14,14 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import SnapshotTesting
|
||||
import XCTest
|
||||
|
||||
struct Application {
|
||||
static func launch() -> XCUIApplication {
|
||||
let app = XCUIApplication()
|
||||
app.launchEnvironment = ["IS_RUNNING_UI_TESTS": "1"]
|
||||
Bundle.elementFallbackLanguage = "en"
|
||||
app.launch()
|
||||
return app
|
||||
}
|
||||
@@ -36,4 +38,39 @@ extension XCUIApplication {
|
||||
|
||||
button.tap()
|
||||
}
|
||||
|
||||
/// Assert screenshot for a screen with the given identifier. Does not fail if a screenshot is newly created.
|
||||
/// - Parameter identifier: Identifier of the UI test screen
|
||||
func assertScreenshot(_ identifier: UITestScreenIdentifier) {
|
||||
let failure = verifySnapshot(matching: screenshot().image,
|
||||
as: .image(precision: 0.98, scale: nil),
|
||||
named: identifier.rawValue,
|
||||
testName: testName)
|
||||
|
||||
if let failure = failure,
|
||||
!failure.contains("No reference was found on disk."),
|
||||
!failure.contains("to test against the newly-recorded snapshot") {
|
||||
XCTFail(failure)
|
||||
}
|
||||
}
|
||||
|
||||
private var testName: String {
|
||||
osVersion + "-" + languageCode + "-" + regionCode + "-" + deviceName
|
||||
}
|
||||
|
||||
private var deviceName: String {
|
||||
UIDevice.current.name
|
||||
}
|
||||
|
||||
private var languageCode: String {
|
||||
Locale.current.languageCode ?? ""
|
||||
}
|
||||
|
||||
private var regionCode: String {
|
||||
Locale.current.regionCode ?? ""
|
||||
}
|
||||
|
||||
private var osVersion: String {
|
||||
UIDevice.current.systemVersion.replacingOccurrences(of: ".", with: "-")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@ class AuthenticationCoordinatorUITests: XCTestCase {
|
||||
app.typeText("alice\n")
|
||||
app.secureTextFields["passwordTextField"].tap()
|
||||
app.typeText("12345678")
|
||||
|
||||
app.assertScreenshot(.authenticationFlow)
|
||||
|
||||
// Login Screen: Tap next
|
||||
app.buttons["nextButton"].tap()
|
||||
@@ -41,7 +43,7 @@ class AuthenticationCoordinatorUITests: XCTestCase {
|
||||
XCTAssertFalse(app.alerts.element.exists, "No alert should be shown when logging in with valid credentials.")
|
||||
}
|
||||
|
||||
func testLoginWithIncorrectPassword() {
|
||||
func testLoginWithIncorrectPassword() async throws {
|
||||
// Given the authentication flow.
|
||||
let app = Application.launch()
|
||||
app.goToScreenWithIdentifier(.authenticationFlow)
|
||||
@@ -51,11 +53,15 @@ class AuthenticationCoordinatorUITests: XCTestCase {
|
||||
|
||||
// Login Screen: Enter invalid credentials
|
||||
app.textFields["usernameTextField"].tap()
|
||||
app.typeText("alice\n")
|
||||
app.typeText("87654321\n")
|
||||
app.typeText("alice")
|
||||
app.secureTextFields["passwordTextField"].tap()
|
||||
app.typeText("87654321")
|
||||
|
||||
// Login Screen: Tap next
|
||||
app.buttons["nextButton"].tap()
|
||||
|
||||
// Then login should fail.
|
||||
XCTAssertTrue(app.alerts.element.exists, "An error alert should be shown when attempting login with invalid credentials.")
|
||||
XCTAssertTrue(app.alerts.element.waitForExistence(timeout: 1), "An error alert should be shown when attempting login with invalid credentials.")
|
||||
}
|
||||
|
||||
func testSelectingOIDCServer() {
|
||||
|
||||
@@ -26,6 +26,8 @@ class BugReportUITests: XCTestCase {
|
||||
|
||||
XCTAssertFalse(app.images["screenshotImage"].exists)
|
||||
XCTAssertFalse(app.buttons["removeScreenshotButton"].exists)
|
||||
|
||||
app.assertScreenshot(.bugReport)
|
||||
}
|
||||
|
||||
func testToggleSendingLogs() {
|
||||
@@ -62,6 +64,8 @@ class BugReportUITests: XCTestCase {
|
||||
|
||||
XCTAssert(app.images["screenshotImage"].exists)
|
||||
XCTAssert(app.buttons["removeScreenshotButton"].exists)
|
||||
|
||||
app.assertScreenshot(.bugReportWithScreenshot)
|
||||
}
|
||||
|
||||
func verifyInitialStateComponents(in app: XCUIApplication) {
|
||||
|
||||
@@ -36,6 +36,8 @@ class LoginScreenUITests: XCTestCase {
|
||||
validateOIDCButtonIsHidden(for: state)
|
||||
validateNextButtonIsDisabled(for: state)
|
||||
validateUnsupportedServerTextIsHidden(for: state)
|
||||
|
||||
app.assertScreenshot(.login)
|
||||
|
||||
// When typing in a username and password.
|
||||
app.textFields.element.tap()
|
||||
|
||||
@@ -26,6 +26,8 @@ class RoomScreenUITests: XCTestCase {
|
||||
XCTAssert(app.staticTexts["roomNameLabel"].exists)
|
||||
XCTAssert(app.staticTexts["roomAvatarPlaceholderImage"].exists)
|
||||
XCTAssertFalse(app.images["encryptionBadgeIcon"].exists)
|
||||
|
||||
app.assertScreenshot(.roomPlainNoAvatar)
|
||||
}
|
||||
|
||||
func testEncryptedWithAvatar() {
|
||||
@@ -35,5 +37,7 @@ class RoomScreenUITests: XCTestCase {
|
||||
XCTAssert(app.staticTexts["roomNameLabel"].exists)
|
||||
XCTAssert(app.images["roomAvatarImage"].exists)
|
||||
XCTAssert(app.images["encryptionBadgeIcon"].exists)
|
||||
|
||||
app.assertScreenshot(.roomEncryptedWithAvatar)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,8 @@ class ServerSelectionUITests: XCTestCase {
|
||||
|
||||
let dismissButton = app.buttons["dismissButton"]
|
||||
XCTAssertTrue(dismissButton.exists, "The dismiss button should be shown during modal presentation.")
|
||||
|
||||
app.assertScreenshot(.serverSelection)
|
||||
}
|
||||
|
||||
func testEmptyAddress() async {
|
||||
@@ -95,5 +97,7 @@ class ServerSelectionUITests: XCTestCase {
|
||||
|
||||
let confirmButton = app.buttons["confirmButton"]
|
||||
XCTAssertEqual(confirmButton.label, ElementL10n.actionNext, "The confirm button should say Next when not in modal presentation.")
|
||||
|
||||
app.assertScreenshot(.serverSelectionNonModal)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,11 +22,13 @@ class SessionVerificationUITests: XCTestCase {
|
||||
let app = Application.launch()
|
||||
app.goToScreenWithIdentifier(.sessionVerification)
|
||||
|
||||
XCTAssert(app.navigationBars["Verify this session"].exists)
|
||||
XCTAssert(app.navigationBars[ElementL10n.verificationVerifyDevice].exists)
|
||||
|
||||
XCTAssert(app.buttons["startButton"].exists)
|
||||
XCTAssert(app.buttons["dismissButton"].exists)
|
||||
XCTAssert(app.staticTexts["titleLabel"].exists)
|
||||
|
||||
app.assertScreenshot(.sessionVerification)
|
||||
|
||||
app.buttons["startButton"].tap()
|
||||
|
||||
@@ -52,7 +54,7 @@ class SessionVerificationUITests: XCTestCase {
|
||||
let app = Application.launch()
|
||||
app.goToScreenWithIdentifier(.sessionVerification)
|
||||
|
||||
XCTAssert(app.navigationBars["Verify this session"].exists)
|
||||
XCTAssert(app.navigationBars[ElementL10n.verificationVerifyDevice].exists)
|
||||
|
||||
XCTAssert(app.buttons["startButton"].exists)
|
||||
XCTAssert(app.buttons["dismissButton"].exists)
|
||||
@@ -80,7 +82,7 @@ class SessionVerificationUITests: XCTestCase {
|
||||
let app = Application.launch()
|
||||
app.goToScreenWithIdentifier(.sessionVerification)
|
||||
|
||||
XCTAssert(app.navigationBars["Verify this session"].exists)
|
||||
XCTAssert(app.navigationBars[ElementL10n.verificationVerifyDevice].exists)
|
||||
|
||||
XCTAssert(app.buttons["startButton"].exists)
|
||||
XCTAssert(app.buttons["dismissButton"].exists)
|
||||
@@ -88,12 +90,12 @@ class SessionVerificationUITests: XCTestCase {
|
||||
|
||||
app.buttons["startButton"].tap()
|
||||
|
||||
XCTAssert(app.activityIndicators["requestingVerificationProgressView"].exists)
|
||||
XCTAssert(app.activityIndicators["requestingVerificationProgressView"].waitForExistence(timeout: 1))
|
||||
XCTAssert(app.buttons["cancelButton"].exists)
|
||||
|
||||
app.buttons["cancelButton"].tap()
|
||||
|
||||
XCTAssert(app.images["sessionVerificationFailedIcon"].exists)
|
||||
XCTAssert(app.images["sessionVerificationFailedIcon"].waitForExistence(timeout: 1))
|
||||
XCTAssert(app.buttons["restartButton"].exists)
|
||||
|
||||
XCTAssert(app.buttons["dismissButton"].exists)
|
||||
|
||||
@@ -35,5 +35,7 @@ class SettingsUITests: XCTestCase {
|
||||
let logoutButton = app.buttons["logoutButton"]
|
||||
XCTAssert(logoutButton.exists)
|
||||
XCTAssertEqual(logoutButton.label, ElementL10n.logout)
|
||||
|
||||
app.assertScreenshot(.settings)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ class SplashScreenUITests: XCTestCase {
|
||||
let getStartedButton = app.buttons["getStartedButton"]
|
||||
XCTAssertTrue(getStartedButton.exists, "The primary action button should be shown.")
|
||||
XCTAssertEqual(getStartedButton.label, ElementL10n.loginSplashSubmit)
|
||||
|
||||
app.assertScreenshot(.splash)
|
||||
}
|
||||
|
||||
func testSwipingBetweenPages() {
|
||||
@@ -32,8 +34,8 @@ class SplashScreenUITests: XCTestCase {
|
||||
app.goToScreenWithIdentifier(.splash)
|
||||
|
||||
// Given the splash screen in its initial state.
|
||||
let page1TitleText = app.staticTexts["Own your conversations."]
|
||||
let page2TitleText = app.staticTexts["You're in control."]
|
||||
let page1TitleText = app.staticTexts[ElementL10n.ftueAuthCarouselSecureTitle]
|
||||
let page2TitleText = app.staticTexts[ElementL10n.ftueAuthCarouselControlTitle]
|
||||
let hiddenPageTitleText = app.staticTexts["hiddenPage"].firstMatch
|
||||
|
||||
XCTAssertTrue(page1TitleText.isHittable, "The title from the first page of the carousel should be onscreen.")
|
||||
@@ -41,21 +43,21 @@ class SplashScreenUITests: XCTestCase {
|
||||
XCTAssertFalse(hiddenPageTitleText.isHittable, "The hidden page of the carousel should be offscreen.")
|
||||
|
||||
// When swiping to the next screen.
|
||||
page1TitleText.swipeLeft()
|
||||
page1TitleText.swipeLeft(velocity: .fast)
|
||||
|
||||
// Then the second screen should be shown.
|
||||
XCTAssertFalse(page1TitleText.isHittable, "The title from the first page of the carousel should be offscreen.")
|
||||
XCTAssertTrue(page2TitleText.isHittable, "The title from the second page of the carousel should be onscreen.")
|
||||
|
||||
// When swiping back to the previous screen.
|
||||
page2TitleText.swipeRight()
|
||||
page2TitleText.swipeRight(velocity: .fast)
|
||||
|
||||
// Then the first screen should be shown again.
|
||||
XCTAssertTrue(page1TitleText.isHittable, "The title from the first page of the carousel should be onscreen.")
|
||||
XCTAssertFalse(page2TitleText.isHittable, "The title from the second page of the carousel should be offscreen.")
|
||||
|
||||
// When swiping back to the previous screen.
|
||||
page1TitleText.swipeRight()
|
||||
page1TitleText.swipeRight(velocity: .fast)
|
||||
|
||||
// Then the screen shouldn't change and the hidden screen should be ignored.
|
||||
XCTAssertTrue(page1TitleText.isHittable, "The title from the first page of the carousel should be still be onscreen.")
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:60037d78b322527f64c0a47cdfc61b96513f22c0091f7afb0a4105580b1eea41
|
||||
size 91503
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9c195ee646e48580e0d728800560843bdf5dd8b79d42f4e8b698789653eceb11
|
||||
size 133295
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:01d71c887f8826d4773870545b783c72ac3a53907702a9939e206a4757cd964b
|
||||
size 141874
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:22845af4a94d276e29356bab40507686ec2c14eca3513ccc91793c6336fdb997
|
||||
size 96025
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c59f19903191f38dfd7a9bfef2b8e2c2aa002495657253f3df4eea1b3aeea440
|
||||
size 98733
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c625a166d76a1021086cd97a9548a761385ebd0dbaee6e18c5f5a9d09aec5ae3
|
||||
size 99082
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:634e8238082c2c41a57827a998bc899492d7a7a1470103cf24c23aa288bd29de
|
||||
size 95254
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1977a8035b854bc819d55eb0ba68cc1ad9152feb81f473addbc90cf6296c3c4d
|
||||
size 92097
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3ee3d153825cd161ae93cdd95967f3d3f6c1726c5e73ba7c922265b04a775c45
|
||||
size 96763
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a135e969addb8545f736ab0f8c4e7aad76db7321f3ab0b5f424afffeabfed799
|
||||
size 86517
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:33465db5f5f55edce021a2dfadce43b2779bfea31cdade02522101118047dd6d
|
||||
size 87425
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:893079215cd22c90b390e712295715c31e92edb99556c111d45af1d391b5b2a6
|
||||
size 82161
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c44984bc009d7b21752487684cea325dd60b7d696c864bc892f6010cd2a260b2
|
||||
size 176423
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1d6eeb4ef424e6e15bca3123ee1087a1c47da4e06732f0b66504234440302791
|
||||
size 108537
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2e42686a5550b507f02e4fa8860ec88de40d673fa3700cfc36027d2e271a89a5
|
||||
size 189958
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3432845788298295390e3a706638c932fa0a1c7a7a4d99a95626a50c515731d8
|
||||
size 200350
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b593a969b05c11bac33f7fa63833b92a37ca0a32218a2b876f87231b2f5f4b83
|
||||
size 114179
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:baade06124e5051e89c86a4a4ae74f516d2bd1e97dc4d3f4c3a1cb54aeeb0006
|
||||
size 121212
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:94bf164d92d3b9a30b1f55488c15ad2fbd0ff6187177dd9ca6793af1ecf96f09
|
||||
size 121590
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6deeb2e7af547800490dcb1e9ec6b201ed89331078af132289d9d746e10ccf88
|
||||
size 117759
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8cd264fc469594f43120841529b71e286bb2c5d1d6af98ec8aabd405955812a0
|
||||
size 112645
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:832cbe7eaaff779cb9fade6c70e46e35f5129e16d097116290a2fc7d08ccda3e
|
||||
size 125052
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d1ab43eb65bff3b8928097ea7ab7c42636031b15826b3066d3bffa72d0e916eb
|
||||
size 105058
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0559cb067d5d208ff3b3bfe227cb05c982f02049afbfcae16a1fd18502659110
|
||||
size 105346
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9111429919c609590775d155fd3851b3cf4f3a1e95d8e29103cd5f30630d8362
|
||||
size 98287
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5c13e2a3bc474aace45c29c7e0948529aa1937de79a08be45c7e0041fb419bd6
|
||||
size 258258
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e251c01cc598169a9a3097b1d7ca8e4aca60bc118861abfa97f987e9edc03cc8
|
||||
size 89500
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d04e1e639afb1fbecfc81ab1aae9e28bea8a0218beb48fbba38cb027ecf00c2c
|
||||
size 123508
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:50638cf723cbb02e8dd07d0835a86400f38323b3d498086ef9c4627d308ce851
|
||||
size 132380
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5ff18b059dcafd687568a5e514be23683b7b26ae0bdcf946cad0f6da00bdda48
|
||||
size 91794
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c59f19903191f38dfd7a9bfef2b8e2c2aa002495657253f3df4eea1b3aeea440
|
||||
size 98733
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c625a166d76a1021086cd97a9548a761385ebd0dbaee6e18c5f5a9d09aec5ae3
|
||||
size 99082
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0d15a4cf9a2cbcd2f067bd6f4882c6aa984de0540691f0cdf18cfb9254b42340
|
||||
size 94820
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1977a8035b854bc819d55eb0ba68cc1ad9152feb81f473addbc90cf6296c3c4d
|
||||
size 92097
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4ab0b4e922dcec267143fd1ecb79f688f3dd1fb4142ca4b9802f9658811bd04f
|
||||
size 88919
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f71157a2b3031ff4ba712e4437b1764d191b37949b31057f73d7d72d07f45b19
|
||||
size 85095
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:33465db5f5f55edce021a2dfadce43b2779bfea31cdade02522101118047dd6d
|
||||
size 87425
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:893079215cd22c90b390e712295715c31e92edb99556c111d45af1d391b5b2a6
|
||||
size 82161
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4002de7d9b069256b944d5e465d2e621ddecf774485e78d98aa53576f4b12fb4
|
||||
size 171343
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c38c756d04ba1ca5e619a3a654e2e31d34a2c3ef26d13a91fa3df3a1532420f3
|
||||
size 105554
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1d11254b71618a27c5480f6e6baef320a7c33fd6f930573233d2c828ac8c815e
|
||||
size 170519
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f50dab74af47bf3e6b2ad0879ac795534e33ce0c5fd350286747ddca380f6bb3
|
||||
size 181677
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3af816fad7b9cd25b79dc5daab3593882c9863d1659a817dd1a03464d6b74e70
|
||||
size 108198
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:baade06124e5051e89c86a4a4ae74f516d2bd1e97dc4d3f4c3a1cb54aeeb0006
|
||||
size 121212
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:94bf164d92d3b9a30b1f55488c15ad2fbd0ff6187177dd9ca6793af1ecf96f09
|
||||
size 121590
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0b1807c06fa9ec79c1b679c3240b4b82877fcfaddc85b36800d336782d8187fd
|
||||
size 116993
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8cd264fc469594f43120841529b71e286bb2c5d1d6af98ec8aabd405955812a0
|
||||
size 112645
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9666d0d3e3575d86396b48740f6ee1771278385036c03b6602b734f5839b683e
|
||||
size 111487
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2d698f31e4e8f1023cb30a6514ebb150c527b42dd1fec4011a56c2eaccb36bc1
|
||||
size 103704
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0559cb067d5d208ff3b3bfe227cb05c982f02049afbfcae16a1fd18502659110
|
||||
size 105346
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9111429919c609590775d155fd3851b3cf4f3a1e95d8e29103cd5f30630d8362
|
||||
size 98287
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:86adb84be619da4c1565c925c54d590deb164934e82ea6b13479e3ecf5d2e189
|
||||
size 250198
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:93d44ea1d0046ab223ccb72c748b349fa84367f3b57608632378ff308a14653e
|
||||
size 91694
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bc22a188001292f3875c25e440513af319a905e7b8c3c1338c611131a503a3f5
|
||||
size 131243
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4e132481b0b5440778b879901c5b3845fd94b1a3d9e9aec6677a9b40fc9585b7
|
||||
size 140116
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5716a0d96325187cd36cb3e8932ab8174689fb3d7af217672338b98015c8362c
|
||||
size 95897
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c59f19903191f38dfd7a9bfef2b8e2c2aa002495657253f3df4eea1b3aeea440
|
||||
size 98733
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c625a166d76a1021086cd97a9548a761385ebd0dbaee6e18c5f5a9d09aec5ae3
|
||||
size 99082
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1ee3a80d365927ea32e2c7f58a26d43676cb5318d81b33b5fbce4f2990af055f
|
||||
size 94345
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1977a8035b854bc819d55eb0ba68cc1ad9152feb81f473addbc90cf6296c3c4d
|
||||
size 92097
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:131888f2ffca929c0ac01a1a4c50dc0c827eeca6f05eecad5d1daaee8e07a07a
|
||||
size 93542
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:de68528cfe3537cf99cfc8c39cebe9b6b11644d6450e58bf413b5a54611f9966
|
||||
size 86673
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:33465db5f5f55edce021a2dfadce43b2779bfea31cdade02522101118047dd6d
|
||||
size 87425
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:893079215cd22c90b390e712295715c31e92edb99556c111d45af1d391b5b2a6
|
||||
size 82161
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e61fc3a96daf648060ffc31c38685a72ec496a24dc1a684231603f875dbaf45e
|
||||
size 169953
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:75c2aa2caf80ac10da1232d2a5fe91f26db96909c8fc3cd794578b11ef7a273d
|
||||
size 108755
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:70ff4a758bdc5674baf0a89d6c051311fc4dcf4fcbac0ee8b5411a3d45c93d9a
|
||||
size 186767
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5aa962819981bef46f434560e6d9ab9ee36251039eb23bf3c52b1f4fc2e26137
|
||||
size 197589
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3f4d182709356176fb85e80c06248fbe59f759c0312e574775fa82354a8c2346
|
||||
size 114060
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:baade06124e5051e89c86a4a4ae74f516d2bd1e97dc4d3f4c3a1cb54aeeb0006
|
||||
size 121212
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:94bf164d92d3b9a30b1f55488c15ad2fbd0ff6187177dd9ca6793af1ecf96f09
|
||||
size 121590
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f7010a9c85d949507ca78f4e822613448ee01b16b21fabed3cbcee32e69acc7c
|
||||
size 116112
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8cd264fc469594f43120841529b71e286bb2c5d1d6af98ec8aabd405955812a0
|
||||
size 112645
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:00f947c3ac70000fa588217c99e91f97fcdd8783817695bcca43e2076ff54cb6
|
||||
size 119052
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b24b79cb1b28178b4343d79e0886f6a960debf09209febdb1ba66a3e6fec1e59
|
||||
size 106352
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0559cb067d5d208ff3b3bfe227cb05c982f02049afbfcae16a1fd18502659110
|
||||
size 105346
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9111429919c609590775d155fd3851b3cf4f3a1e95d8e29103cd5f30630d8362
|
||||
size 98287
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:653d8625036bfab4b42c7a466e3f1e995fa24ecefa674081999a4f9a5d86dfd3
|
||||
size 247092
|
||||
Reference in New Issue
Block a user